home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / e / ddmoduls.lha / dd_Modules / dd_gui / dd_busypointer.e next >
Text File  |  1995-12-01  |  4KB  |  156 lines

  1. ->
  2. -> dd_busypointer.e - window busypointer class
  3. ->
  4. -> Copyrights © 1995 by Leon `LikeWise' Woestenberg, Digital Disturbance.
  5. -> All Rights Reserved
  6. ->
  7. -> FOLDER opts
  8. OPT MODULE
  9. -> ENDFOLDER
  10. -> FOLDER modules
  11. MODULE 'intuition/intuition'
  12. MODULE 'utility/tagitem'
  13. MODULE 'exec/memory'
  14. -> ENDFOLDER
  15. -> FOLDER classes
  16. EXPORT OBJECT busypointer
  17.   PRIVATE
  18.   window:PTR TO window
  19. ENDOBJECT
  20. -> ENDFOLDER
  21. -> FOLDER defs
  22. DEF busySprite:PTR TO INT,usecount
  23. -> ENDFOLDER
  24.  
  25. -> FOLDER new
  26. EXPORT PROC new(window=NIL) OF busypointer
  27.  
  28.   -> Remember window we should act on.
  29.   self.window:=window
  30.  
  31.   -> A pre v39 system?
  32.   IF (KickVersion(39)=FALSE)
  33.  
  34.     -> Increase the busycount to allow nested calls.
  35.     usecount:=usecount+1
  36.     -> Only act when this class (not object!) is used for the first time.
  37.     IF usecount=1
  38.  
  39.       -> If the busySprite is not yet in chip memory, we must take care
  40.       -> of that ourselves.
  41.       IF (TypeOfMem({busySpriteData}) AND MEMF_CHIP)=0
  42.  
  43.         -> Allocate chip memory for the pointer sprite.
  44.         busySprite:=AllocMem(72,MEMF_CHIP)
  45.         IF busySprite
  46.  
  47.           -> Copy the busySprite to chip memory. Positions and length
  48.           -> are longword alligned, so we use the CopyMemQuick one.
  49.           CopyMemQuick({busySpriteData},busySprite,72)
  50.  
  51.         -> We are out of chip memory here. I guess we can't do much here,
  52.         -> the user will have to live without busy pointer functionality.
  53.         ELSE
  54.         ENDIF
  55.       ELSE
  56.  
  57.         -> The busySprite already is in chip memory.
  58.         busySprite:={busySpriteData}
  59.  
  60.       ENDIF
  61.     ENDIF
  62.   ENDIF
  63. ENDPROC
  64. -> ENDFOLDER
  65. -> FOLDER end
  66. EXPORT PROC end() OF busypointer
  67.  
  68.   -> A pre v39 system?
  69.   IF KickVersion(39)=FALSE
  70.  
  71.     usecount:=usecount-1
  72.     -> We only act if this class (not object!) becomes unused.
  73.     IF usecount=0
  74.  
  75.       -> Check if we have copied the busy pointer to another location.
  76.       -> If so, we will have to free that copy ourselves.
  77.       IF busySprite<>{busySpriteData}
  78.  
  79.         -> Free the chip memory involved.
  80.         FreeMem(busySprite,72)
  81.  
  82.         -> And clear the chip memory pointer.
  83.         busySprite:=NIL
  84.  
  85.       ENDIF
  86.     ENDIF
  87.   ENDIF
  88.  
  89.   -> Forget the window we did belong to.
  90.   self.window:=NIL
  91.  
  92. ENDPROC
  93. -> ENDFOLDER
  94. -> FOLDER busy
  95. EXPORT PROC busy() OF busypointer
  96.  
  97.   -> window valid?
  98.   IF self.window
  99.  
  100.     -> v39+ system?
  101.     IF KickVersion(39)
  102.  
  103.       -> Set window busy pointer using v39+ system function.
  104.       SetWindowPointerA(self.window,[WA_BUSYPOINTER,TRUE,WA_POINTERDELAY,TRUE,TAG_DONE])
  105.  
  106.     -> This is a pre v39 system. We supply our own busypointer.
  107.     ELSE
  108.  
  109.       -> Set our busy pointer.
  110.       IF busySprite THEN SetPointer(self.window,busySprite,16,16,-6,0)
  111.  
  112.     ENDIF
  113.   ENDIF
  114. ENDPROC
  115. -> ENDFOLDER
  116. -> FOLDER unbusy
  117. EXPORT PROC unbusy() OF busypointer
  118.  
  119.   -> window valid?
  120.   IF self.window
  121.     -> v39+ system?
  122.     IF KickVersion(39)
  123.  
  124.       -> Clear busy pointer using v39 system function.
  125.       SetWindowPointerA(self.window,NIL)
  126.  
  127.     -> pre v39 system
  128.     ELSE
  129.  
  130.       -> Clear the busy pointer from our window.
  131.       ClearPointer(self.window)
  132.  
  133.     ENDIF
  134.   ENDIF
  135. ENDPROC
  136. -> ENDFOLDER
  137.  
  138. -> FOLDER busySpriteData
  139.  
  140.   -> We keep the busypointer data longword alligned. This way we can use
  141.   -> quick memory copy operations.
  142.   LONG "BUSY"
  143.  
  144.   -> A copy of the actual busypointer sprite.
  145.   busySpriteData:
  146.   INT $0000,$0000,$0400,$07c0
  147.   INT $0000,$07c0,$0100,$0380
  148.   INT $0000,$07e0,$07c0,$1ff8
  149.   INT $1ff0,$3fec,$3ff8,$7fde
  150.   INT $3ff8,$7fbe,$7ffc,$ff7f
  151.   INT $7efc,$ffff,$7ffc,$ffff
  152.   INT $3ff8,$7ffe,$3ff8,$7ffe
  153.   INT $1ff0,$3ffc,$07c0,$1ff8
  154.   INT $0000,$07e0,$0000,$0000
  155. -> ENDFOLDER
  156.